# 0. 导入必要的库
from util import load, get, dump
from sklearn.model_selection import train_test_split
from lazypredict.Supervised import LazyClassifier
import pandas as pd
import os

# 1. 加载训练集和测试集
Xy_root = get("Xy_root")
X_train, X_test, y_train, y_test = load("X_train, X_test, y_train, y_test", f'{Xy_root}/Xy')

# 2. 使用LazyClassifier进行快速模型评估
print("开始评估所有的模型:")

# 创建LazyClassifier对象
clf = LazyClassifier(verbose=0, ignore_warnings=True, custom_metric=None)

# 进行模型评估
models, predictions = clf.fit(X_train, X_test, y_train, y_test)
print(models)

# 获取评估结果中的F1分数并排序
scores = models.sort_values(by='F1 Score', ascending=False)
print(scores)  # 打印不同模型的评估结果对比

# 3. 获取F1分数最高的模型
# 获取F1分数最高的模型名称
best_model_name = scores.index[0]
print("F1分数最高的模型是: ", best_model_name)

# 根据模型名称，从模型字典中获取模型对象
best_model = clf.models[best_model_name]

# 4. 序列化最佳模型
os.makedirs('./models', exist_ok=True)
model_root = get("model_root")
dump(best_model, "最好的F1分数的模型", f'{model_root}/best_model')
